【小ネタ】利用中のCloudFormationのテンプレートとパラメータをAWS CLIで一括取得する
こんにちは、コカコーラ好きなカジです。
最近、AWS CLIを使った作業前後の確認をすることに魅了されています。w
本番環境で利用中のCloudFormationのテンプレートをダウンロードし手元の検証環境でテストしたかったので、AWS CLIで一括ダウンロードするスクリプト作成しました。 これからCloudFormationのテンプレートファイルをGithubなどのバージョン管理したい時などにも使えると思います。
スクリプト
AWS CLIが利用でき、取得に必要なIAM権限を持っていることを前提としています。
$ cat cfn-download.sh #!/bin/bash DATE=`date +%Y%m%d_%H-%M-%S` # StackName List Create aws cloudformation describe-stacks --query 'Stacks[].StackName[]' | egrep -v '\[|\]' | sed 's/ "//g' | sed 's/"//g' | sed 's/,//g' > StackName-list-${DATE}.txt # Cfn Template & Parameter Download cat StackName-list-${DATE}.txt | while read LINE do aws cloudformation get-template --stack-name ${LINE} --query 'TemplateBody' > ${LINE}_${DATE}.template aws cloudformation describe-stacks --stack-name ${LINE} --output table > ${LINE}-parameter_${DATE}.txt done
注意点
パラメータについては、個人的な好みでJSONではなくTable形式で出力しています。
Create Stackした時のCloudFormationテンプレートファイルや、Management Consoleのテンプレートタブで参照したテンプレートファイルと上記スクリプトで出力されたCloudFormationのテンプレートファイルは、中身の順番が変わります。
そのため、変更後の差分比較する場合に順番が違いすぎて綺麗に比較できません。 比較する場合はjqコマンドのオプション「-S」でそれぞれSortしてから比較すると良いです。
<例>
$ cat before.template | jq . -S > test.txt $ cat after.template | jq . -S > test2.txt % diff test.txt test2.txt 72c72 < "Type": "List<AWS::EC2::SecurityGroup::Id>" --- > "Type": "AWS::EC2::SecurityGroup::Id"
まとめ
1つぐらいなら、Mnagement Consoleからコピーアンドペーストでも良いのですが、量がある場合はAWS CLIだと簡単ですね。 どなたかのお役に立てれば幸いです。